/* '10'.pad(4, '-'); // --10 */
String.prototype.pad = function(width, z) {
	z = z || '0';
	var n = this + '';
	return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
}

/* (pretty lenient) 1.234,00 -> 1234.00 (NaN se nao conseguir) */
String.prototype.toNumber = function() {
    var stringProcessada = this
            .replace(/[^\d\.,]/g, '') //tira tudo que não for numero, ponto e virgula
            .replace(/,/g, '.');       //troca virgula por ponto
    var idxUltimoPonto = stringProcessada.lastIndexOf('.');
    if(idxUltimoPonto > 0) {
        var parteInteira = stringProcessada.substring(0, idxUltimoPonto).replace(/\./g, '');
        stringProcessada = parteInteira + '.' + stringProcessada.substring(idxUltimoPonto+1);
    }
    if(stringProcessada.trim().length == 0) return NaN
    //* 1 para garatir que é numero
    return stringProcessada * 1
}

String.prototype.isNumber = function(decimalSeparator) {
    var str = this;
    if(decimalSeparator) {
        //caso especial: se o sep não for ponto, ter ponto invalida (expect('1.'.isNumber(',')).toBeFalsy();)
        if(decimalSeparator !== '.' && str.indexOf('.') >= 0)
            return false
        str = this.replace(decimalSeparator, '.');
    }
    return !isNaN(Number(str));
}